/**
 * ClassName: AutomaticTypePromptForDataTypeVariables
 * Package: PACKAGE_NAME
 * Description:基本数据类型变量的自动类型提升
 *测试基本数据类型变量间的运算规则
 * @Author 糕糕
 * @Create 2024-01-19 16:40
 * @Version 1.0
 */

//这里提到可以做运算的基本数据类型有7种，不包含boolean类型
    //运算规则包括：
    //1.自动类型提升
    //2.强制类型转换

    //规则：当容量小的变量与容量大的变量做运算时，结果自动转换为容量大的数据类型
    //说明：此时的容量小或大，并非指占用的内存空间的大小，而是指数据范围的大小
    //例如：long(8字节) double (4字节)，但是double表示的范围比long大
    //byte/char/short-->short--->int--->long---->float---->double
    //特殊情况 byte、short、char类型的变量之间做运算，结果为int类型
public class AutomaticTypePromptForDataTypeVariables {

    public static void main(String[] args) {
        int i1=10;
        int i2=i1;
        long l1=i1;
        float f1=l1;

        byte b1=12;
        int i3=b1+i1;


//        特殊情况1：byte,short 类型的变量之间做运算，结果为int类型
        byte b3=12;
        short s1=10;
        //编译不通过 short s2=b3+s1;
        int i4=b3+s1;

//        特殊情况2：char chart与byte运算需要int接受
        char c1='a';
        //编译不通过
        //char c2=c1+b3;
        int i5=c1+b3;


    }

}


class AutoTypePromptType{
    public static void main(String[] args) {
        //练习1：
        long l1=123L;
        long l2=123;//理解为自动类型提升 int类型赋值给了long类型 (int--->long)

        //long l3=123123123112; //理解为int类型，因为超出了int范围，所以报错
        long l3=123123123112L;
        System.out.println(l1);

        //练习2：
        float  f2=12.3F;
        //float f3=12.3;//不满足自动类型提升的规则（double---》float）
        double f3=12.3;

        //练习3：
        //规定1：整型常量，规定为是int类型
        byte b5=10;
        //byte b6=b5+1; //报错
        int b6=b5+1;
        //规定2：浮点型常量，规定都是double类型
        double d1=b5+12.3;

        //练习4：说明为什么不允许变量名是数字开头的，为了’自洽‘，标识符不能以数字开头
    /*    int 123L=12;
        long 16=123L;*/




    }
}
